#!/usr/bin/env python
# coding: utf-8

# # 实践：宿舍人脸识别门禁系统
# > 1. 创建FaceSet
# > 2.查询FaceSet
# > 3.存入face_token数据
# > 4.获取FaceSet信息数据
# > 5.人脸搜索
# > 6.人脸对比

# ## 1.创建FaceSet
# * 描述
# > 1.创建一个人脸的集合 FaceSet，用于存储人脸标识 face_token。一个 FaceSet 能够存储10000个 face_token。
# > 2.试用API Key可以创建1000个FaceSet，正式API Key可以创建10000个FaceSet。
# 
# * url
# > https://api-cn.faceplusplus.com/facepp/v3/faceset/create
# 
# * 调用方法
# > POST
# 
# * 请求参数

# In[2]:


import pandas as pd
pd.read_html("""<div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col><col><col><col></colgroup><tbody><tr><th class="confluenceTh"><p><span style="color: rgb(0,0,0);">是否必选</span></p></th><th class="confluenceTh"><p><span style="color: rgb(0,0,0);">参数名</span></p></th><th class="confluenceTh"><p><span style="color: rgb(0,0,0);">类型</span></p></th><th class="confluenceTh"><p><span style="color: rgb(0,0,0);">参数说明</span></p></th></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">必选</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">api_key</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">String</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">调用此 API 的 API Key</span></p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">必选</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">api_secret</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">String</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">调用此 API 的 API Secret</span></p></td></tr><tr><td class="confluenceTd"><span style="color: rgb(0,0,0);">可选</span></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">display_name</span></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">String</span></td><td class="confluenceTd"><span style="color: rgb(0,0,0);">人脸集合的名字，最长<span class="inline-comment-marker" data-ref="9f098728-ac30-41a2-aab6-05b79f8a7d2e">256</span>个字符，不能包括字符^@,&=*'"</span></td></tr><tr><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">可选</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">outer_id</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">String</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">账号下全局唯一的 FaceSet 自定义标识，可以用来管理 FaceSet 对象。最长255个字符，<span class="inline-comment-marker" data-ref="63fc0fd1-cd44-4256-bab5-971a939d66e2"><span class="inline-comment-marker" data-ref="183dcb11-c22c-47f4-aa9c-2ba6f3c8210c">不能包括字符^@,&=*'"</span></span></span></td></tr><tr><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">可选</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">tags</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">String</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">FaceSet 自定义标签组成的字符串，用来对 FaceSet 分组。最长<span class="inline-comment-marker" data-ref="1be760b6-f20d-4ff3-a086-b7f763abd84d">255</span>个字符，多个 tag 用逗号分隔，每个 tag 不能包括字符^@,&=*'"</span></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">可选</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">face_tokens</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">String</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">人脸标识 face_token，可以是一个或者多个，用逗号分隔。最多不超过5个 face_token</span></p></td></tr><tr><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">可选</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">user_data</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">String</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">自定义用户信息，不大于<span class="inline-comment-marker" data-ref="f9edadb1-691d-4d80-933e-909096780f61">16 KB，不能包括字符^@,&=*'"</span></span></td></tr><tr><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">可选</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">force_merge</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">Int</span></td><td colspan="1" class="confluenceTd"><p><span style="color: rgb(0,0,0);">在传入 outer_id 的情况下，如果 outer_id 已经存在，是否将 face_token 加入已经存在的 FaceSet 中</span></p><p><span style="color: rgb(0,0,0);">0：不将 face_tokens 加入已存在的 FaceSet 中，直接返回 FACESET_EXIST 错误</span></p><p><span style="color: rgb(0,0,0);">1：将 face_tokens 加入已存在的 FaceSet 中</span></p><p><span style="color: rgb(0,0,0);">默认值为0</span></p></td></tr></tbody></table></div>""")[0]


# In[8]:


# 准备工作
import requests
API_KEY = 'MDWXHz-Sd9lPFfSFONGpV992nhJj71iq'
API_SECRET = '2H6Tmh9MhwnUu-VVz56w81x4CD71yzkw'


# In[10]:


# A-1 创建人脸数据集合
FaceSet_url = 'https://api-cn.faceplusplus.com/facepp/v3/faceset/create'
payload = {
    'api_key':API_KEY,
    'api_secret':API_SECRET
}
r = requests.post( url=FaceSet_url, params = payload)


# In[24]:


r


# In[25]:


r.json()


# ## 2.查询数据集
# * 描述
# > 1. 获取某一 API Key 下的 FaceSet 列表及其 faceset_token、outer_id、display_name 和 tags 等信息。
# > 2. 注意：2017年8月16日后，调用本接口将不会一次性返回全量的 FaceSet。单次查询最多返回 100 个 FaceSet。如需获取全量数据，需要配合使用 start 和 next 参数。请尽快修改调整您的程序。
# 
# * url
# > https://api-cn.faceplusplus.com/facepp/v3/faceset/getfacesets
# （获取人脸库列表及信息 API）
# 
# * 调用方法
# > POST

# In[18]:


pd.read_html("""<div class="table-wrap"><table class="wrapped confluenceTable"><colgroup><col><col><col><col></colgroup><tbody><tr><th class="confluenceTh"><p><span style="color: rgb(0,0,0);">是否必选</span></p></th><th class="confluenceTh"><p><span style="color: rgb(0,0,0);">参数名</span></p></th><th class="confluenceTh"><p><span style="color: rgb(0,0,0);">类型</span></p></th><th class="confluenceTh"><p><span style="color: rgb(0,0,0);">参数说明</span></p></th></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">必选</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">api_key</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">String</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">调用此API的API Key</span></p></td></tr><tr><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">必选</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">api_secret</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">String</span></p></td><td class="confluenceTd"><p><span style="color: rgb(0,0,0);">调用此API的API Secret</span></p></td></tr><tr><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">可选</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">tags</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">String</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">包含需要查询的FaceSet标签的字符串，用逗号分隔</span></td></tr><tr><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">可选</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">start</span></td><td colspan="1" class="confluenceTd"><span style="color: rgb(0,0,0);">Int</span></td><td colspan="1" class="confluenceTd"><p class="p1"><span style="color: rgb(0,0,0);">一个数字 n，表示开始返回的 faceset_token 在传入的 API Key 下的序号。</span></p><p><span style="color: rgb(0,0,0);">通过传入数字 n，可以控制本 API 从第 n 个 faceset_token 开始返回。返回的 faceset_token 按照创建时间排序。每次返回<span class="s1">1000</span>个<span class="s1">FaceSets</span>。</span></p><p class="p1"><span style="color: rgb(0,0,0);">默认值为1。</span></p><p class="p1"><span style="color: rgb(255,0,0);">注意：2017年8月16日后，每次返回的 FaceSet 数量上限从 1000 改为 100。并且您可以输入上一次请求本 API 返回的 next 值，用以获得接下来的 100 个 faceset_token。请尽快修改调整您的程序。</span></p></td></tr></tbody></table></div>""")[0]


# In[38]:


API_KEY = 'MDWXHz-Sd9lPFfSFONGpV992nhJj71iq'
API_SECRET = '2H6Tmh9MhwnUu-VVz56w81x4CD71yzkw'

FaceSet_url = 'https://api-cn.faceplusplus.com/facepp/v3/faceset/getfacesets'
payload = {
    'api_key':API_KEY,
    'api_secret':API_SECRET
}

r = requests.post(url = FaceSet_url, params = payload)


# In[39]:


r.json()['facesets']


# In[40]:


faceset_token = r.json()['facesets'][-1]['faceset_token']
faceset_token


# ## 获取人脸库信息API

# In[31]:


API_KEY = 'MDWXHz-Sd9lPFfSFONGpV992nhJj71iq'
API_SECRET = '2H6Tmh9MhwnUu-VVz56w81x4CD71yzkw'

getdetail_url = 'https://api-cn.faceplusplus.com/facepp/v3/faceset/getdetail'
payload = {
    'api_key':API_KEY,
    'api_secret':API_SECRET,
    'faceset_token':faceset_token
}

r = requests.post(url = getdetail_url, params = payload)


# In[32]:


r


# In[33]:


r.json()


# ## 3.更新数据集描述信息(更新人脸库信息 API)

# In[34]:


update_FaceSet_url = 'https://api-cn.faceplusplus.com/facepp/v3/faceset/update'

payload = {
    'api_key':API_KEY,
    'api_secret':API_SECRET,
    'faceset_token':faceset_token,
    'new_outer_id':'API021214',
    'display_name':'20级网新API周二晚班',
    'user_data':'59人，23男同学，36女同学'
}
r = requests.post(url = update_FaceSet_url, params = payload)


# In[35]:


r.json()

